
package br.com.pi.SmartFast.controler;

//importações
import br.com.pi.SmartFast.model.DataHora;
import br.com.pi.SmartFast.model.FormatoDeNumeros;
import br.com.pi.SmartFast.model.Mesa;
import br.com.pi.SmartFast.model.ProdutoDAO;
import br.com.pi.SmartFast.model.MesaDAO;
import br.com.pi.SmartFast.model.Pedidos;
import br.com.pi.SmartFast.model.Produto;
import java.awt.Image;
import java.sql.ResultSet;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JSpinner;   
/**
 *
 * @author Lídia comentario
 */
public class ControleTelaCardapio {

    //declaração de variáveis das telas
    private JButton botaoRefeicoes,botaoSobremesas, botaoBebidas;
    private JList jList_Produtos, jList_DescricaoBebidas, jList_Refeicoes, jList_DescricaoRefeicoes, jList_Sobremesas,
            jList_DescricaoSobremesas, jList_ValorBebidas, jList_ValorSobremesas, jList_ValorRefeicoes;
    private JLabel jLabel_FotoBebidas, jLabel_FotoRefeicoes, jLabel_FotoSobremesas;
    private ProdutoDAO dao= new ProdutoDAO();
    private JSpinner Quantidade_Bebidas, Quantidade_Refeicoes, Quantidade_Sobremesas;
    private ResultSet rs= null;
    private JFrame tela;
    private DefaultListModel modelBebida = new DefaultListModel();
    private DefaultListModel modelSobremesa = new DefaultListModel();
    private DefaultListModel modelRefeicoes = new DefaultListModel();
    private DefaultListModel modelDescricaoBebidas = new DefaultListModel();
    private DefaultListModel modelDescricaoSobremesas = new DefaultListModel();
    private DefaultListModel modelDescricaoRefeicoes = new DefaultListModel();
    private DefaultListModel modelValorBedidas = new DefaultListModel();
    private DefaultListModel modelValorSobremesas = new DefaultListModel();
    private DefaultListModel modelValorRefeicoes = new DefaultListModel();
    private MesaDAO mesaDao = new MesaDAO();
    public final int n_mesa = 1;
    public static List <Pedidos> pedido = new ArrayList<Pedidos>();

   
    //método construtor
     public ControleTelaCardapio() {
    }

    public ControleTelaCardapio(JButton botaoRefeicoes, JButton botaoSobremesas, JButton botaoBebidas, JList jList_Bebidas, JList jList_DescricaoBebidas, JList jList_Refeicoes, JList jList_DescricaoRefeicoes, JList jList_Sobremesas, JList jList_DescricaoSobremesas, JList jList_ValorBebidas, JList jList_ValorSobremesas, JList jList_ValorRefeicoes, JLabel jLabel_FotoBebidas, JLabel jLabel_FotoRefeicoes, JLabel jLabel_FotoSobremesas, JSpinner Quantidade_Bebidas, JSpinner Quantidade_Refeicoes, JSpinner Quantidade_Sobremesas, JFrame tela) {
        this.botaoRefeicoes = botaoRefeicoes;
        this.botaoSobremesas = botaoSobremesas;
        this.botaoBebidas = botaoBebidas;
        this.jList_Produtos = jList_Bebidas;
        this.jList_DescricaoBebidas = jList_DescricaoBebidas;
        this.jList_Refeicoes = jList_Refeicoes;
        this.jList_DescricaoRefeicoes = jList_DescricaoRefeicoes;
        this.jList_Sobremesas = jList_Sobremesas;
        this.jList_DescricaoSobremesas = jList_DescricaoSobremesas;
        this.jList_ValorBebidas = jList_ValorBebidas;
        this.jList_ValorSobremesas = jList_ValorSobremesas;
        this.jList_ValorRefeicoes = jList_ValorRefeicoes;
        this.jLabel_FotoBebidas = jLabel_FotoBebidas;
        this.jLabel_FotoRefeicoes = jLabel_FotoRefeicoes;
        this.jLabel_FotoSobremesas = jLabel_FotoSobremesas;
        this.Quantidade_Bebidas = Quantidade_Bebidas;
        this.Quantidade_Refeicoes = Quantidade_Refeicoes;
        this.Quantidade_Sobremesas = Quantidade_Sobremesas;
        this.tela = tela;
    }

    public void aoAbrirTela(int par){
        this.tela.setExtendedState(JFrame.MAXIMIZED_BOTH);
        if(par==1){
            this.Refeicoes();
        }else if(par==2){
            this.Sobremesas();
        }else if(par==3){
            this.Bebidas();
        }
    }

        public void aoAbrirTela2(int par){
              this.tela.setExtendedState(JFrame.MAXIMIZED_BOTH);
        if(par==1){
            this.Refeicoes();
        }else if(par==2){
            this.Sobremesas();
        }else if(par==3){
            this.Bebidas();
        }
    }  

    //Método para trazer as bebidas cadastradas no banco de dados para a TelaBebidas
    public void Bebidas(){

        this.limpaListas();
        this.setimagebebida();
        try{
            rs = dao.getDadosTabela("Select nome From produtos WHERE fk_tipo_Produto = 3");//variável rs (resultSet) recebe os dados da tabela com determinada instrução sql
            if (rs.next()){//para ir para a primeira linha e próximo
                this.modelBebida.clear();
                this.jList_Produtos.removeAll();
                do{//laço de repetição para adicionar num model todos os nomes de produtos do tipo bebidas
                    this.modelBebida.addElement(rs.getString("nome"));

                }while (rs.next());//fim do laço
                jList_Produtos.setModel(modelBebida);//o jList da tela recebe o model preenchido
            }
        }catch (Exception e){//tratamento de exceção            
        JOptionPane.showMessageDialog(null, "Problemas de Conexão com o servidor!!\n Favor chamar o Garçom !", "Conexão", JOptionPane.ERROR_MESSAGE);
        }
      
    }

     //Método destinado a relacionar os itens cadastrados para a Bebida selecionada
      public void getDescricaoBebidas() {

           try{
                rs = dao.getDadosTabela("SELECT it.nome as nome FROM itens as it, itens_produto as ip, produtos as pd"+//variável rs (resultSet) recebe os dados da tabela com determinada instrução sql
" WHERE pd.nome like '" + jList_Produtos.getSelectedValue().toString() + "' and " +
                        " pd.id_produtos = ip.fk_id_produtos and  " +
                        " ip.fk_id_itens = it.id_itens");
                if (rs.next()){
                    this.modelDescricaoBebidas.clear();
                    this.jList_DescricaoBebidas.removeAll();
                    do{
                        this.modelDescricaoBebidas.addElement(rs.getString("nome"));
                        }while (rs.next());
                        jList_DescricaoBebidas.setModel(modelDescricaoBebidas);
                }
            }catch (Exception e){              
            
            }

      }

       //Método para trazer o valor da Bebida selecionada
      public void getValorBebidas(){
           try{               //Pegando o valor da bebida selecionada do banco de dados
                rs= dao.getDadosTabela("SELECT valor_venda FROM produtos"+
" WHERE nome like '" + jList_Produtos.getSelectedValue().toString() + "'");

                if (rs.next()){//indo para a primeira linha
                    this.modelValorBedidas.clear();//limpando o model que recebe o valor
                    this.jList_ValorBebidas.removeAll();//removendo todos os valores do jList onde aparecem as bebidas para que não haja repetições
                    this.modelValorBedidas.addElement(new FormatoDeNumeros(rs.getFloat("valor_venda")).getValorMonetario());
                    jList_ValorBebidas.setModel(modelValorBedidas);
                    jList_ValorBebidas.setSelectedIndex(0);
                }
            }catch (Exception e){//tratamento de exceção         
            
            }

      }

       //Método para trazer a foto da Bebida escolhida.
            public void getFotoBebidas(){

          try{
              this.rs = dao.getDadosTabela("SELECT foto FROM produtos"+
" WHERE nome like '" + jList_Produtos.getSelectedValue().toString() + "'");

              this.rs.next();

              this.jLabel_FotoBebidas.setText(null);//desabilita o texto
                  if(this.rs.getBytes("foto") != null){
                Image im = new ImageIcon(rs.getBytes("foto")).getImage();
                this.jLabel_FotoBebidas.setIcon(new ImageIcon(im));
                  }
          }catch (Exception e){            

             }
          }

    //Método para trazer as sobremesas cadastradas no banco de dados para a TelaSobremesa

       public void Sobremesas(){

           this.limpaListas();
            this.setimageSobremesa();
           try{
               rs= dao.getDadosTabela(("Select nome From produtos WHERE fk_tipo_Produto = 2"));//variável rs (resultSet) recebe os dados da tabela com determinada instrução sql
               if (rs.next()){
                    this.modelSobremesa.clear();
                    this.jList_Produtos.removeAll();
                   do{
                       this.modelSobremesa.addElement(rs.getString("nome"));
                   }while (rs.next());
                   jList_Produtos.setModel(modelSobremesa);
               }
           }catch (Exception e){
              JOptionPane.showMessageDialog(null, "Problemas de Conexão com o servidor!!\n Favor chamar o Garçom !", "Conexão", JOptionPane.ERROR_MESSAGE);
           }
       }

          //Método destinado a relacionar os itens cadastrados para a Sobremesa selecionada

      public void getDescricaoSobremesas(){

          try{
              rs=dao.getDadosTabela("SELECT it.nome as nome FROM itens as it, itens_produto as ip, produtos as pd"+
" WHERE pd.nome like '" + jList_Produtos.getSelectedValue().toString() + "' and " +
                        " pd.id_produtos = ip.fk_id_produtos and  " +
                        " ip.fk_id_itens = it.id_itens");
              if(rs.next()){
                  this.modelDescricaoSobremesas.clear();
                  this.jList_DescricaoBebidas.removeAll();
                  do{
                      this.modelDescricaoBebidas.addElement(rs.getString("nome"));
                  }while (rs.next());
                  jList_DescricaoBebidas.setModel(modelDescricaoSobremesas);
              }
          }catch (Exception e){
              
          }
      }


         //Método para trazer a foto da Sobremesa escolhida.
            public void getFotoSobremesas(){

          try{
              this.rs = dao.getDadosTabela("SELECT foto FROM produtos"+
" WHERE nome like '" + jList_Produtos.getSelectedValue().toString() + "'");

              this.rs.next();

              this.jLabel_FotoBebidas.setText(null);//desabilita o texto
                  if(this.rs.getBytes("foto") != null){
                Image im = new ImageIcon(rs.getBytes("foto")).getImage();
                this.jLabel_FotoBebidas.setIcon(new ImageIcon(im));
                  }
          }catch (Exception e){
             

             }
          }


      //Método para trazer o valor da sobremesa selecionada
      public void getValorSobremesas(){
           try{
               
               //Pegando o valor da bebida selecionada do banco de dados
                rs= dao.getDadosTabela("SELECT valor_venda FROM produtos"+
" WHERE nome like '" + jList_Produtos.getSelectedValue().toString() + "'");

                if (rs.next()){//indo para a primeira linha
                    this.modelValorSobremesas.clear();//limpando o model que recebe o valor
                    this.jList_ValorBebidas.removeAll();//removendo todos os valores do jList onde aparecem as sobremesas para que não haja repetições
                    this.modelValorSobremesas.addElement(new FormatoDeNumeros(rs.getFloat("valor_venda")).getValorMonetario());
                    jList_ValorBebidas.setModel(modelValorSobremesas);
                    jList_ValorBebidas.setSelectedIndex(0);
                }


            }catch (Exception e){//tratamento de exceção
             
            }

      }


      private void limpaListas(){

           this.jList_DescricaoBebidas.removeAll();
           this.jList_DescricaoRefeicoes.removeAll();
           this.jList_DescricaoSobremesas.removeAll();
           this.modelDescricaoBebidas.clear();
           this.modelDescricaoRefeicoes.clear();
           this.modelDescricaoSobremesas.clear();
           this.modelValorBedidas.clear();
           this.jList_ValorBebidas.removeAll();

      }
       //Método para trazer as refeições cadastradas no banco de dados para a TelaRefeicao
       public void Refeicoes(){
           this.limpaListas();
           try{
               rs= dao.getDadosTabela("Select nome From produtos WHERE fk_tipo_Produto = 1");//variável rs (resultSet) recebe os dados da tabela com determinada instrução sql
               if (rs.next()){
                    this.modelRefeicoes.clear();                    
                    this.jList_Produtos.removeAll();

                   do{
                       this.modelRefeicoes.addElement(rs.getString("nome"));
                   }while (rs.next());
                   jList_Produtos.setModel(modelRefeicoes);
               }
           }catch (Exception e){
               
               
           }

           this.setimagePrato();
       }

   
      //Método destinado a relacionar os itens cadastrados para a Refeição selecionada
       public void getDescricaoRefeicoes(){

          try{
              rs=dao.getDadosTabela("SELECT it.nome as nome FROM itens as it, itens_produto as ip, produtos as pd"+
" WHERE pd.nome like '" + jList_Produtos.getSelectedValue().toString() + "' and " +
                        " pd.id_produtos = ip.fk_id_produtos and  " +
                        " ip.fk_id_itens = it.id_itens");
              if(rs.next()){
                  this.modelDescricaoRefeicoes.clear();
                  this.jList_DescricaoBebidas.removeAll();
                  do{
                      this.modelDescricaoBebidas.addElement(rs.getString("nome"));
                  }while (rs.next());
                  jList_DescricaoBebidas.setModel(modelDescricaoRefeicoes);
              }
          }catch (Exception e){
              
          }
        
      }

      
                //Método para trazer a foto da Refeição escolhida.
            public void getFotoRefeicoes(){

          try{
              this.rs = dao.getDadosTabela("SELECT foto FROM produtos"+
" WHERE nome like '" + jList_Produtos.getSelectedValue().toString() + "'");

              this.rs.next();

              this.jLabel_FotoBebidas.setText(null);//desabilita o texto
                  if(this.rs.getBytes("foto") != null){
                Image im = new ImageIcon(rs.getBytes("foto")).getImage();
                this.jLabel_FotoBebidas.setIcon(new ImageIcon(im));
                  }
          }catch (Exception e){
              

             }
          }

 //Método para trazer o valor da refeição selecionada
      public void getValorRefeicoes(){
           try{          

               //Pegando o valor da bebida selecionada do banco de dados
                rs= dao.getDadosTabela("SELECT valor_venda FROM produtos"+
" WHERE nome like '" + jList_Produtos.getSelectedValue().toString() + "'");

                if (rs.next()){//indo para a primeira linha
                    this.modelValorRefeicoes.clear();//limpando o model que recebe o valor
                    this.jList_ValorBebidas.removeAll();//removendo todos os valores do jList onde aparecem as refeições para que não haja repetições
                    this.modelValorRefeicoes.addElement(new FormatoDeNumeros(rs.getFloat("valor_venda")).getValorMonetario());
                    jList_ValorBebidas.setModel(modelValorRefeicoes);
                    jList_ValorBebidas.setSelectedIndex(0);
                }


            }catch (Exception e){//tratamento de exceção              
            
            }

      }

      public void ajudaGarcom(){

     try{
         Mesa ms = new Mesa();//criando objeto do tipo mesa
         ms.setAjuda_garcom(true);//objeto recebe o metodo Ajuda_garcom com o valor true
         ms.setCod_mesa(n_mesa);//objeto recebe o cod da mesa que é uma constante para a mesa 1
         this.mesaDao.AjudaGarcom(ms);//seta no banco o objeto para mudar o status solicitando a ajuda do garçom
         JOptionPane.showMessageDialog(null,"Solicitação enviada com sucesso!!!");//mensagem de confirmação

     }catch (Exception e){//tratamento de exceção
         


     }

      }

      public void BotaoAdicionar(JSpinner qb, JList produto, JList qt){
         Pedidos ped = new Pedidos();
         Produto prod = new Produto();
         Mesa ms = new Mesa();

         if(!produto.isSelectionEmpty()){
             prod.setNome(produto.getSelectedValue().toString());
             prod.setCodigo_prod(this.getCodProduto(produto.getSelectedValue().toString()));
             //prod.setCodigo_prod(2);
             ped.setProduto(prod);
             ped.setPedido_Fechado(false);
             ped.setPed_atendido(false);
             ped.setProd_pago(false);
             ms.setCod_mesa(n_mesa);
             ped.setMesa(ms);
             ped.setData_hora(new DataHora().getDataHora());
             ped.setQuantidade_prod(Integer.parseInt(qb.getValue().toString()));
             String[] nm = qt.getSelectedValue().toString().split(" ");
             ped.setCusto_produto(Float.parseFloat(nm[1].replace(",", ".")));

             pedido.add(ped);

             JOptionPane.showMessageDialog(null,"Seu pedido foi encaminhado!");
             this.tela.setVisible(false);
          }else{
            JOptionPane.showMessageDialog(null, "não existe produto selecionado!!");
          }
      }

      
      private Integer getCodProduto(String nome){
         String sql = "SELECT id_produtos FROM produtos WHERE nome like '" + nome + "'";
         Integer cod=0;
         try{
             rs = dao.getDadosTabela(sql);
             if(rs.next()){
                 cod= rs.getInt("id_produtos");
             }
         }catch (Exception e) {
             cod=null;
         }
         return cod;
      }

      public List<Pedidos> getLista(){
          return pedido;
      }

      public void setRemoveItemPedido(String produto){

          for(int i=0;i< pedido.size();i++){
              if(produto.equals(pedido.get(i).getProduto().getNome())){
                  pedido.remove(i);
              }
          }
      }

      public  void setimagebebida(){
          
              this.botaoBebidas.setIcon(new ImageIcon("src/br/com/pi/SmartFast/imagens/imgBebidas2.png"));
              this.botaoRefeicoes.setIcon(new ImageIcon("src/br/com/pi/SmartFast/imagens/imgRefeicoes.png"));
              this.botaoSobremesas.setIcon(new ImageIcon("src/br/com/pi/SmartFast/imagens/imgSobremesas.png"));

      }

      public void setimagePrato(){
          
              this.botaoRefeicoes.setIcon(new ImageIcon("src/br/com/pi/SmartFast/imagens/imgRefeicoes2.png"));
              this.botaoBebidas.setIcon(new ImageIcon("src/br/com/pi/SmartFast/imagens/imgBebidas.png"));
              this.botaoSobremesas.setIcon(new ImageIcon("src/br/com/pi/SmartFast/imagens/imgSobremesas.png"));
          }

      public void setimageSobremesa(){

          
              this.botaoSobremesas.setIcon(new ImageIcon("src/br/com/pi/SmartFast/imagens/imgSobremesas2.png"));
              this.botaoBebidas.setIcon(new ImageIcon("src/br/com/pi/SmartFast/imagens/imgBebidas.png"));
              this.botaoRefeicoes.setIcon(new ImageIcon("src/br/com/pi/SmartFast/imagens/imgRefeicoes.png"));
          }


      
   }
